home *** CD-ROM | disk | FTP | other *** search
- .\" $Id: eight-bit.me,v 3.0 1991/07/04 21:56:26 christos Exp $
- How to use 8 bit characters
- by
- Johan Widen
- (jw@sics.se)
- and
- Per Hedeland
- (per@erix.ericsson.se)
-
- .pp
- (Disclaimer: This is really a sketch of an approach rather
- than a "how-to" document.
- Also, it is mostly relevant to Swedish X Window users...)
-
- .pp
- The way I use this facility at present is to add lines such as the following
- to my .cshrc:
-
- .nf
- setenv NOREBIND
- setenv LC_CTYPE iso_8859_1
- foreach key ( \\\\304 \\\\305 \\\\326 \\\\344 \\\\345 \\\\366 )
- bindkey $key self-insert-command
- end
- .fi
-
- .pp
- Note that if I used a system with a reasonably complete NLS
- (and a tcsh compiled to use it),
- all of the above could be replaced with simply setting the LANG environment
- variable to an appropriate value - the NLS would then indicate exactly which
- characters should be considered printable, and tcsh would do the rebinding
- of these automatically. The above works for tcsh's simulated NLS and for
- the NLS in SunOS 4.1 - without the NOREBIND setting, all of the
- Meta-<non-control-character> bindings would be undone in these cases.
-
- .pp
- These keybindings are the codes for my national characters, but the bindings
- (M-d, M-e etc) are not conveniently placed.
- They are however consistent with what other programs will see.
-
- .pp
- Now: I actually want the character \\304 to be inserted when I press say '{'
- together with a modifier key. I want the behavior to be the same not only
- in tcsh but in say cat, an editor and all other programs. I fix this by
- performing a keyboard remapping with the
- .i xmodmap
- program (I use X Windows).
-
- .pp
- I give xmodmap an input something like the following:
-
- .nf
- keycode 26 = Mode_switch
- add mod2 = Mode_switch
- ! if you want Mode_switch to toggle, add the line below
- ! add Lock = Mode_switch
- ! Binds swedish characters on ][\\
- !
- keycode 71 = bracketleft braceleft adiaeresis Adiaeresis
- keycode 72 = bracketright braceright aring Aring
- keycode 95 = backslash bar odiaeresis Odiaeresis
- .fi
-
- or:
-
- .nf
- keysym Alt_R = Mode_switch
- add mod2 = Mode_switch
- keysym bracketleft = bracketleft braceleft Adiaeresis adiaeresis
- keysym bracketright = bracketright braceright Aring aring
- keysym backslash = backslash bar Odiaeresis odiaeresis
- .fi
-
- Another, more portable way of doing the same thing is:
-
- .nf
- #!/bin/sh
- # Make Alt-] etc produce the "appropriate" Swedish iso8859/1 keysym values
- # Should handle fairly strange initial mappings
-
- xmodmap -pk | sed -e 's/[()]//g' | \\
- awk 'BEGIN {
- alt["bracketright"] = "Aring"; alt["braceright"] = "aring";
- alt["bracketleft"] = "Adiaeresis"; alt["braceleft"] = "adiaeresis";
- alt["backslash"] = "Odiaeresis"; alt["bar"] = "odiaeresis";
- }
- NF >= 5 && (alt[$3] != "" || alt[$5] != "") {
- printf "keycode %s = %s %s ", $1, $3, $5;
- if (alt[$3] != "") printf "%s ", alt[$3];
- else printf "%s ", $3;
- printf "%s\\n", alt[$5];
- next;
- }
- alt[$3] != "" {
- printf "keycode %s = %s %s %s\\n", $1, $3, $3, alt[$3];
- }
- NF >= 5 && ($3 ~ /^Alt_[LR]$/ || $5 ~ /^Alt_[LR]$/) {
- printf "keycode %s = %s %s Mode_switch\\n", $1, $3, $5;
- if ($3 ~ /^Alt_[LR]$/) altkeys = altkeys " " $3;
- else altkeys = altkeys " " $5;
- next;
- }
- $3 ~ /^Alt_[LR]$/ {
- printf "keycode %s = %s %s Mode_switch\\n", $1, $3, $3;
- altkeys = altkeys " " $3;
- }
- END {
- if (altkeys != "") printf "clear mod2\\nadd mod2 =%s\\n", altkeys;
- }' | xmodmap -
- .fi
-
- .pp
- Finally, with the binding of the codes of my national characters to
- self-insert-command, I lost the ability to use the Meta key to call the
- functions previously bound to M-d, M-e, and M-v (<esc>d etc still works).
- However, with the assumption that
- most of my input to tcsh will be through the
- .i xterm
- terminal emulator, I can get that ability back via xterm bindings!
- Since M-d is the only one of the "lost" key combinations that was
- actually bound to a function in my case,
- and it had the same binding as M-D, I can use the following in
- my .Xdefaults file:
-
- .nf
- XTerm*VT100.Translations: #override \\n\\
- Meta ~Ctrl<Key>d: string(0x1b) string(d)
- .fi
-
- - or, if I really want a complete mapping:
-
- .nf
- XTerm*VT100.Translations: #override \\n\\
- :Meta ~Ctrl<Key>d: string(0x1b) string(d) \\n\\
- :Meta ~Ctrl<Key>D: string(0x1b) string(D) \\n\\
- :Meta ~Ctrl<Key>e: string(0x1b) string(e) \\n\\
- :Meta ~Ctrl<Key>E: string(0x1b) string(E) \\n\\
- :Meta ~Ctrl<Key>v: string(0x1b) string(v) \\n\\
- :Meta ~Ctrl<Key>V: string(0x1b) string(V)
- .fi
-